home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
051-060
/
amok52
/
gadgeted
/
gadgeted.dok
< prev
next >
Wrap
Text File
|
1993-11-04
|
18KB
|
458 lines
----------------------------------------------------------------------
Dokumentation zu GadgetEd V1.0
----------------------------------------------------------------------
Copyright:
----------
Dieses Projekt ist Public Domain und darf frei kopiert werden, solange
die Vollständigkeit des Projekts (s.u.) und mein Name im Programm
erhalten bleibt.
Eine kommerzielle Vermarktung des Projekts ist nur mit ausdrücklicher
Genehmigung des Autors erlaubt. Dies gilt ebenfalls für eine
kommerzielle Nutzung des mit diesem Projekt erstellten Modula2-Source-
codes (d.h., daß Teile eines kommerziell vertriebenen Programms mit
diesem Projekt erstellt werden).
Ausdrücklich erlaubt ist, die mit diesem Projekt erstellten Module in
privat genutzten oder nicht kommerziellen, frei kopierbaren Programmen
(Public Domain, Shareware mit geringer Gebühr) einzusetzen.
GadgetEd V1.0
©1990 Hubert Bildstein
alle Rechte vorbehalten
Autor: Hubert Bildstein
Gehenbühlstr. 5
W7000 Stuttgart 31
Germany
Tel.: 0711/83 18 32
Umfang des Projektes:
---------------------
Das Projekt GadgetEd besteht aus folgenden Modulen:
- GadgetEd (Hauptprogramm)
- Requester
- MoveAndSet
- Gadgets (Auch unabhängig von GadgetEd gut verwendbar)
- Io
- CreateModule
- TextWindows
- Message
- FileNames1 (Enthält Ersatz für FileNames.GetExtension)
- DataStruct (Datenstrukturen, nur DEFINITION-Module)
- ARPFileReq (Amok#31 [B. Preusing])
- Menu (Modul-Gerüst erstellt mit Menugenerator Amok#37 [S. Kraus])
- Test1 (Testprogramm 1)
- Req1 (Gadget-Struktur zu Test1)
- Test2 (Testprogramm 2)
- Req2 (Gadget-Struktur zu Test2)
Das Projekt benötigt die ARP.library in LIBS: und ca. 10kB Stack.
--------------------------
Beschreibung des Projekts:
--------------------------
GadgetEd erlaubt es, ein Fenster mit einer Gadget-Struktur zu versehen.
Diese Struktur kann aus Boolean-, toggleSelect-, String-, Integer- und
1- oder 2-dimensionalen Proportional-Gadgets bestehen. Jedem Gadget kann
ein Text und ein Rahmen zugewiesen werden. Die Gadgets können frei im
Editor-Fenster positioniert und auch nachträglich verändert werden.
Jede Funktion kann über Menü oder eine Tastenkombination angewählt
werden.
Das Fenster kann ebenfalls verschoben und verkleinert/vergrößert werden.
Die gesamte Struktur samt Fenstergröße und -position kann zum späteren
Weiterbearbeiten abgespeichert und wieder eingeladen werden.
Damit mit der Struktur irgendetwas anzufangen ist, kann man den Modula-
Quellcode, der diese Struktur aufbaut, erstellen lassen und in eigene
Programme einfügen.
Die Anzahl der Gadgets ist auf 50 begrenzt. (Konstante in GadgetEd.mod)
Aufruf:
-------
Von der Workbench: Doppelklick des GadgetEd-Icons.
Aus dem CLI: GadgetEd [Filename]
"Filename" ist eine gespeicherte Menu-Struktur. Falls keine Extension
angegeben wird, wird ".ged" als Default verwendet.
Bedienung:
----------
Nach dem Start erscheint ein kleines Window mit Copyright-Vermerk. Es
verschwindet nach ca. 7 Sekunden oder durch Anklicken des Windows oder
des Close-Gadgets.
Mit Drücken der HELP-Taste erscheint ein Window, in dem die Funktions-
tasten aufgeführt sind.
In der Titelleiste des Screens und des Windows steht im Normalfall der
Programmname und der Filename der gerade zu bearbeitenden Struktur.
Alle sonstigen Meldungen (z.B. Disk-Status, was gerade bearbeitet wird)
erscheinen ebenfalls in der Titelleiste.
Durch Anklicken des Windows wird das ganze Fenster neu gezeichnet.
Die einzelnen Funktionen werden über das Menü oder durch Tastenkombi-
nationen angewählt:
PROJECT-Menü:
-------------
- Load: Laden einer Gadget-Struktur über den ARP-FileRequester.
Abkürzung: <RAMIGA>L (= Rechte Amiga-Taste gleichzeitig mit L)
- Save: Speichern der aktuellen Gadget-Struktur unter dem aktuellen
Filenamen. Falls kein Filename existiert, wird auf "SaveAs"
umgeschaltet.
Abkürzung: <RAMIGA>S
- SaveAs: Speichern der aktuellen Gadget-Struktur unter einem neuen
Namen über den ARP-FileRequester.
Abkürzung: <RAMIGA>A
- New: Löschen der aktuellen Gadget-Struktur.
Abkürzung: <RAMIGA>N
- MakeModule: Erstellen des Modula-Quellcodes der aktuellen Struktur.
Es wird nach dem Namen des zu erstellenden Moduls gefragt.
Der Name sollte ohne Extension angegeben werden. Es ist
zu beachten, daß der Name (ohne Extension und ohne Pfad)
Bestandteil des Modul- und der Prozedurnamen wird und
somit ein gültiger Bezeichner sein muß (keine Sonder-
zeichen, Groß-/Kleinschreibung wird übernommen).
Um die Funktion abzubrechen, klickt man das Close-Gadget
des Windows an, ansonsten betätigt man die RETURN-Taste
im aktiven String-Gadget, um das Modul zu erstellen.
Abkürzung: <RAMIGA>M
- QUIT : Beenden des Programms.
Abkürzung: ESC
EDIT-Menü:
----------
Nach Auswahl einer der Punkte dieses Menüs muß das Gadget, auf das sich
die Operation beziehen soll, angeklickt werden. Soll die Funktion nicht
ausgeführt werden, klickt man einen beliebigen Punkt des Windows, der
nicht von einem Gadgets belegt ist, an.
- Delete: Löschen eines Gadgets.
Abkürzung: F1
- Move: Verschieben eines Gadgets. Das Gadget kann nicht aus dem Fenster
herausbewegt werden.
Abkürzung: F2
- Copy: Kopieren eines Gadgets.
Abkürzung: F3
- Size: Verändern der Größe eines Gadgets. Der Mauszeiger muß immer auf
der rechten unteren Ecke des Gadgets stehen, die linke obere
Ecke bleibt immer fest.
Abkürzung: F4
GADGETS-Menü:
-------------
- Boolean
- Normal: Erstellen eines "normalen" Boolean-Gadgets. Festlegen von
Größe und Position durch Drücken der linken Maustaste
(erster Eckpunkt) und deren Wiederloslassen (zweiter Eck-
punkt). Zu kleine Gadgets werden nicht erstellt.
Ein "normales" Boolean-Gadget löst durch sein Anwählen eine
Aktion aus (z.B OK/CANCEL des System-Requesters).
Abkürzung: B
- toggleSelect: Erstellen eines toggleSelect-Boolean-Gadgets. Größe
und Position wird wie bei dem normalen Boolean-Gadget
festegelegt.
Ein toggleSelect ändert durch das Anwählen seinen
Zustand von "An" in "Aus" und umgekehrt (z.B. das
CLI-Gadget in den Preferences).
Abkürzung: T
- String
- Normal: Erstellen eines "normalen" String-Gadgets.
Zuerst muß die Breite des Gadgets festgelegt werden. Dies
geschieht wie bei den Boolean-Gadgets, indem man zwei Eck-
punkte auswählt. Die Höhe wird dann automatisch auf 8
Pixel (=Höhe eines Zeichens) gesetzt. Danach positioniert
man das Rechteck mit der gewählten Breite und festen Höhe
endgültig im Window.
Mit einem String-Gadget kann man beliebige Texte abfragen.
Abkürzung: S
- Integer: Integer-String-Gadgets unterscheiden sich von normalen
String-Gadgets dadurch, daß als Eingabe nur Ziffern
und +/- möglich sind und die Eingabelänge durch den
Bereich von LONGINT begrenzt ist.
Abkürzung: I
Die Bündigkeit der String-Gadgets (Links, Zentriert,Rechts) wird im
Menü ATTRIBUTES festgelegt.
Der Rahmen eines String- und Boolean-Gadgets wird ebenfalls im Menü
ATTRIBUTES festgelegt.
- Proportional
- Horiz: Erstellen eines horizontalen Proportional-Gadgets. Position
und Größe werden wie bei Boolean-Gadgets festgelegt.
Nach der Positionierung erscheint ein Requester, in dem
abgefragt wird, in wieviel Schritte der Regler unterteilt
werden soll (Default: 16).
(z.B. RGB-Farbregler)
Abkürzung: X
- Vert: Wie Horiz, nur Vertikal!
Abkürzung: Y
- Both: Erstellen eines zweidimensionalen Proportional-Gadgets.
(z.B. Screen-Position-Gadgets in den Preferences)
Abkürzung: Z
Der Rahmen eines Proportional-Gadgets wird von Intuition automatisch
gezeichnet und kann vom Benutzer nicht geändert werden!
ATTRIBUTES-Menü:
----------------
Für alle folgenden Requester gilt, daß das betätigen des Close-Gadgets
des Requester-Windows die Funktion ohne Änderung abbricht.
- Text: Versieht ein Gadget mit einem Text oder ändert einen bereits
vorhandenen Text.
Nach Auswahl des Gadgets erscheint ein Requester mit folgenden
Feldern:
Text: Text des Gadgets
frontPen: Schriftfarbe
backPen: Hintergrundfarbe
Center: Zentrieren des Textes im Gadget (für Boolean-G.).
Position: freie Wahl der Position des Textes.
Falls das gewählte Gadget ein String-Gadget ist, wird das Text-
Gadget des Requesters nicht automatisch aktiviert.
Abkürzung: F9
- Border:
- No: Alle neuen String- und Boolean-G. werden ohne Rahmen erstellt.
Abkürzung: <RAMIGA>O
- Single: ... mit einfachem Rahmen erstellt.
Abkürzung: <RAMIGA>I
- Double: ... mit doppeltem Rahmen erstellt.
Abkürzung: <RAMIGA>D
- String-Ausrichtung:
- Left: Alle neuen String-G. sind linksbündig bei der Eingabe.
Abkürzung: <RAMIGA>E
- Center: ... zentrieren bei der Eingabe.
Abkürzung: <RAMIGA>C
- Right: ... sind rechtsbündig bei der Eingabe.
Abkürzung: <RAMIGA>R
- Change Attributes:
Ändern der Attribute (Rahmen, Ausrichtung...) eines bestehenden
Gadgets. Je nach Typ des gewählten Gadgets erscheinen folgende
Requester:
- String-Gadget: Ändern eines String/Integer-Gadgets.
Auswahl:
Max. Textlength: Max. Anzahl einzugebender Zeichen
Type of Gadget: Umschalten Normal/Integer
Alignment: Ändern der Ausrichtung
Border: Ändern des Rahmens
- Boolean-Gadget: Ändern eines Boolean/toggleSelect-Gadgets.
Auswahl:
Type of Gadget: Umschalten Normal/toggleSelect
Border: Ändern des Rahmens
- Proportional-Gadget:
Auswahl:
Number of steps in x-direction: Anzahl Schritte in x-Richtung
Number of steps in y-direction: Anzahl Schritte in y-Richtung
Abkürzung: F10
--------------------------------------
Beschreibung des erstellten Quellcodes
--------------------------------------
Den Quelltext einer Gadget-Struktur erstellt man durch die
"MakeModule"-Funktion im PROJECT-Menü.
Es werden ein DEFINITION- und ein IMPLEMENTATION-Module erstellt.
Der Name des Moduls ist der Name, der beim Erstellen durch
MakeModule angegeben wurde.
Beispiel: Filename ist: "DF1:Projekt/Requester". Dann werden die
Files "Requester.def" und "Requester.mod" erstellt und
im Directory "DF1:Projekt" abgelegt.
Diese Module importieren nur aus Standard-Bibliotheken, sind also
völlig unabhängig von diesem Projekt.
Im folgenden steht <Name> für den Modulnamen.
Im Definition-Module wird zur Verfügung gestellt:
- die Konstante "NumbGadg<Name>". Sie enthält die Anzahl der von diesem
Modul erstellten Gadgets. (Bsp: "CONST NumbGadgRequester = 8;")
- die Prozedur "Init<Name>". Sie erstellt wahlweise ein Window mit der
im Editor festgelegten Größe und Position und den Gadgets oder baut
die Gadgets in ein bestehendes Window ein. Ersteres Window hat das
Close-Gadget, ist verschiebbar und hat die Tiefen-Gadgets. Die
IDCMP-Flags sind gadgetUp, gadgetDown und closeWindow. Der Titel
des Windows und der Screen, in dem es liegen soll, kann angegeben
werden.
Alle Gadgets haben die ActivationFlags "relVerify" und "gadg-
Immediate".
Parameter:
(VAR wptr : ADDRESS;
Screen : ADDRESS;
Title : ADDRESS);
Falls "wptr=NIL" übergeben wird, wird das Standard-Window wie oben
beschrieben erstellt und in "wptr" der WindowPtr darauf zurückgegeben.
In "Screen" kann ein Zeiger auf den Screen, in dem das Window er-
scheinen soll, und in "Title" die Adresse des Windowtitels übergeben
werden. Falls "Screen=NIL", wird das Fenster im Workbench-Screen
eröffnet.
Falls in "wptr" ein gültiger WindowPtr übergeben wird, werden die
Gadgets in dieses Window eingebaut. wptr wird nicht verändert.
"Screen" und "Title" haben dann keine Wirkung.
(Bsp: PROCEDURE InitRequester
(VAR wptr : ADDRESS;
Screen : ADDRESS;
Title : ADDRESS);
Aufruf z.B. mit:
WPtr := NIL;
InitRequester (WPtr,NIL,ADR("Window-Titel"));
eröffnet das Standard-Window mit dem Titel "Window-Titel" im
Workbench-Screen.)
- die Prozedur "Close<Name>". Sie schließt das von "Init<Name>" er-
öffnete Window wieder.
Parameter:
keine
!! ACHTUNG: die Prozedur verwendet das normale "Intuition.CloseWindow"
zum Schließen des Windows. Diese Prozedur darf NICHT verwendet
werden, wenn sie ein eigenes Window verwenden und dieses vom
"Windows"-Modul des M2Amiga-Compilers erstellt worden ist.
So ein Window MUß auch von "Windows.CloseWindow" wieder geschlossen
werden, sonst gibt es einen Guru am Programmende.
(So was sollte eigentlich auch im Handbuch des Compilers erwähnt
sein!)
(Bsp: PROCEDURE CloseRequester;
Aufruf:
CloseRequester;)
- die Prozedur "Get<Name>GPtr". Sie liefert den GadgetPtr des Gadgets
mit der angegebenen ID.
Parameter:
(ID : INTEGER) : ADDRESS;
Der Bereich der IDs geht von 0 bis "NumbGadg<Name>"-1.
Eine Bereichsüber/unterschreitung führt zu einem Laufzeitfehler.
(Bsp: PROCEDURE GetRequesterGPtr (ID : INTEGER);
Aufruf z.B.:
GPtr := GetRequesterPtr(NumbGadgRequester-1);
liefert den GadgetPtr des letzten Gadgets.)
- Eine Liste der Gadgets mit ID, Typ und Text.
Aus dieser Liste, die ein Kommentar im Quelltext ist, entnimmt man,
welches Gadget welche ID hat, über die allein das Gadget identifi-
ziert werden kann.
Die Reihenfolge der IDs hängt von der Erstellungsreihenfolge ab.
Das zuerst erstellte Gadget erhält die ID 00, das zuletzt Erstellte
immer die höchste ID (= NumbGadg<Name> - 1). Wird ein Gadget ge-
löscht, rücken die Folgenden nach.
(Bsp:
ID Typ Text des Gadgets
---------------------------------------------------------
00 boolGadget OK
01 strGadget Name:
02 strGadget Adresse:
)
Es wird keine Prozedur zur Abfrage der Gadgets erstellt. Dies bleibt dem
Anwender überlassen. Das "Gadgets"-Modul dieses Projekts eignet sich
aber gut dazu.
----------
Sonstiges:
----------
Die Erstellung dieses, wie ich meine sehr nützlichen, Projektes hat ins-
gesamt ca. 4 Monate gedauert (mit Unterbrechungen).
Ich habe es trotz dieses Aufwands als Public Domain deklariert, da ich es
zuerst nur für den Eigengebrauch geschrieben habe und mir erst später
gesagt habe, daß eigentlich nichts gegen eine Veröffentlichung spricht.
Ich bitte hiermit trotz des Public-Domain-Status alle regelmäßigen An-
wender des Projekts um eine Honorierung der Arbeit, die ich mit diesem
Projekt hatte, und der Zeitersparnis, die man mit diesem Projekt bei
der Programmierung hat. Dieser Betrag sollte im Bereich von 5 bis 20.-DM
liegen.
Jeder, der schon einmal eine größere Gadget-Struktur "von Hand"
programmiert hat, weiß von dieser ziemlich nervtötenden Arbeit ein Lied
zu singen, und sollte sich einmal überlegen, wie lange er ohne dieses
Projekt dafür gebraucht hätte.
Außerdem hatte ich durch die Veröffentlichung in der Amok-Reihe auch ein
paar Unkosten (Porto, Shareware für Menugenerator) und ich würde gern
wenigstens diese Kosten wieder hereinbekommen, auch um einen Anreiz zu
bekommen, das Programm weiterzuentwickeln und wiederum zu veröffent-
lichen.
Vielen Dank im voraus.
Mögliche oder geplante Erweiterungen:
-------------------------------------
- gespeicherte Strukturen mit Icons
- Von den Gadgets unabhängige Texte und Rechtecke im Window plazieren
- erstellter Quellcode verwendet wahlweise das "Gadgets"-Modul, um
kürzeren Code zu erstellen.
- Nicht ein Window mit Gadgets, sondern einen "echten" Requester
erstellen.
- mehr verschiedene Rahmentypen
- Farbwahl für Rahmen
- Einbau eines Menügenerators (etwas utopisch)
- Unterscheidung NTSC/PAL. Bisher wird PAL verwendet.
Probleme und Hinweise:
----------------------
- Das Programm ist verdammt groß geworden (ein optimierender Linker
sollte zum Standardumfang des Compilers gehören!). Das Programm
läuft bei 512K RAM, aber manche der geplanten Erweiterungen würden
das Programm noch erheblich vergrößern. Und wenn man dabei auch noch
den Compiler resident halten möchte...
- Um die sym-Files klein zu halten, wurden die meisten Ptr-Typen
(GadgetPtr,WindowPtr,...) durch den Typ ADDRESS ersetzt. Aus dem
Bezeichner oder der Beschreibung geht jeweils hervor, welcher
Typ gemeint ist.
- Selbst kleinere strukturelle Änderungen ziehen eine Änderung der
zentralen Datenstruktur und somit des Abspeicherungsformats nach sich.
Es wird dann schwierig werden, Kompatibilität zu erhalten, wenn
verschiedene Leute verschiedene Änderungen machen.
- Bei der Bearbeitung von String-Gadgets treten immer wieder kleinere
Probleme damit auf, daß durch das Anwählen des Gadgets dies aktiviert
wird und bleibt (Wer weiß, wie man es vom Programm her ausschaltet?).
Beim Löschen eines String-G. bleibt z.B. der Cursor vorerst an der
alten Stelle.
Diese Probleme sind meist graphisch und lassen sich durch Anklicken
des Windows beheben (führt zum Neuaufbau). Abstürze sind auch bei
größeren Strukturen sehr selten geworden.
---------------------------------------------------------------------------
Ende GadgetEd.dok
letzte Änderung: 13.01.1991 Hubert Bildstein
---------------------------------------------------------------------------